สรุปขั้นตอนในการเชื่อมต่อไปยัง S3 โดยใช้ MFA ใน Cyberduck (Windows 10/11)

สรุปขั้นตอนในการเชื่อมต่อไปยัง S3 โดยใช้ MFA ใน Cyberduck (Windows 10/11)

Clock Icon2022.10.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้ผมจะมาเขียนบทความ สรุปขั้นตอนในการเชื่อมต่อไปยัง S3 โดยใช้ MFA ใน Cyberduck (Windows 10/11)

บทความนี้แปลมาจากบทความที่เป็นภาษาญี่ปุ่นที่ชื่อว่า CyberduckでMFAを利用してS3へ接続するための導入手順まとめ(Windows 10) ซึ่งเจ้าของบทความนี้ก็คือ คุณ inomaso เป็นคนญี่ปุ่นครับ

เนื่องจากว่าบทความนี้แปลมาจากภาษาญี่ปุ่น เมื่อแปลมาเป็นภาษาไทยแล้วผมได้เรียบเรียงเนื้อหาใหม่เพื่อให้เข้าใจง่ายขึ้น ! เมื่อพร้อมแล้วเราไปดูรายละเอียดกันเลยครับ


สวัสดีครับ! ผมชื่อ inomaso (@inomasosan) จากฝ่าย Consulting ครับ

ในกรณีที่ต้องการจัดการดาวโหลดหรืออัปโหลด Objects ของ S3 (ข้อมูล เช่นพวกข้อความและวิดีโอใน Buckets) จะไม่สามารถอัปโหลดหรือดาวน์โหลดทั้งโฟลเดอร์จาก AWS Management Console ได้

เราสามารถจัดการดาวโหลดหรืออัปโหลดทีละโฟลเดอร์ได้ด้วยคำสั่ง AWS CLI แต่ผู้ใช้งานทั่วไปที่ไม่ใช่วิศกรอาจจะไม่คุ้นชินกับเครื่องมือ AWS CLI มากนัก

เราจึงขอแนะนำ Cyberduck ที่เป็นแอปพลิเคชันที่สร้างโดย 3rd Party ที่สามารถทำงานแบบกราฟิกได้ด้วย และเราจะมาสรุปวิธีการใช้งานใน Windows 10/11 กันในบทความครับ

นอกจาก Cyberduck มีเครื่องมืออื่นๆที่รองรับอีกไหม?

ถ้าใช้ Windows เป็นหลัก WinSCP ก็จะรองรับ S3 ด้วย
อย่างไรก็ตาม ดูเหมือนว่า WinSCP จะไม่รองรับ MFA (จะอธิบายในภายหลัง) ดังนั้นครั้งนี้เราจะไม่ใช้มัน

หากต้องการใช้ WinSCP ให้ดูที่ลิงก์บทความด้านล่างนี้

แผนภาพ

นี่คือแผนภาพที่จะตั้งค่าในครั้งนี้

เราสามารถเชื่อมต่อไปยัง S3 ได้ด้วย Access key ของ IAM User และ Secret access key โดยไม่ต้องใช้ IAM Role
อย่างไรก็ตาม กรณีที่ใช้ MFA ใน Cyberduck จำเป็นต้องเพิ่ม AssumeRole ไปยัง IAM Role จาก IAM User

ด้วยการเพิ่ม AssumeRole จะทำให้เราได้รับสิทธิ์ของ IAM Role
หากต้องการทราบรายละเอียดเพิ่มเติม สามารถดูรูปภาพบทความด้านล่างนี้ประกอบความเข้าใจได้ครับ

นอกจากนี้ Access key ของ IAM User เป็นข้อมูลการรับรองความถูกต้องแบบถาวร หากรั่วไหลออกไปยังภายนอกจะส่งผลกระทบอย่างใหญ่หลวง
ในทางกลับกัน กรณีของ IAM Role จะเป็นการสร้างข้อมูลการรับรองความถูกต้องแบบชั่วคราวในขณะที่ใช้งาน จึงทำให้สามารถดำเนินการได้อย่าปลอดภัย

ขั้นตอนฝั่ง AWS

ผมได้สรุปส่วนที่ตั้งค่าของแต่ละ Resource ไว้เรียบร้อยแล้ว

Resource ที่จะสร้างมีดังนี้ (ชื่อเหล่านี้เป็นแค่ตัวอย่าง)

Service Name Resource Name Comment
S3 Bucket tinnakorn-s3-mfa
IAM Policy tinnakorn-need-mfa-policy
IAM Policy tinnakorn-assume-role-policy
IAM User Group tinnakorn-s3-mfa-group tinnakorn-need-mfa-policy, tinnakorn-assume-role-policy
IAM User tinnakorn-s3-mfa Group=tinnakorn-s3-mfa-group, ตั้งค่า MFA
IAM Role tinnakorn-s3-mfa-role AmazonS3FullAccess

สร้าง S3 Bucket

S3 bucket เป็นเหมือนกล่องสำหรับอัปโหลด Objects

กรณีที่ต้องการทดลองโดยให้ความสำคัญในการเชื่อมต่อกับ S3 เพื่อวัตถุประสงค์ในการตรวจสอบนั้น นอกจากชื่อ Bucket แล้ว การตั้งค่าส่วนอื่นสามารถแก้ไขได้ในภายหลัง เราจึงสามารถใช้การตั้งค่าแบบ Default ในการสร้าง S3 bucket ได้เลย
เช่น การตั้งค่า Bucket Versioning สำหรับกู้คืน Objects จากการดำเนินการที่ผิดพลาดและ Default encryption ของ Objects จะสามารถเปลี่ยนการตั้งค่าได้แม้หลังจากสร้าง S3 Bucket เสร็จแล้ว

สร้าง IAM Policy

เราจะสร้าง Policy ที่จำเป็นจาก IAM Console

1. MFA + การเปลี่ยนรหัสผ่าน

ถ้าเราไม่ได้ตั้งค่า MFA จะเป็นการใช้ policy ที่ไม่สามารถดำเนินการต่างๆนอกจากการตั้งค่า MFA หรือการเปลี่ยนรหัสผ่านได้

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/${aws:username}",
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:ChangePassword",
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

อ้างอิง: อย่างน้อยก็ควรใส่สิ่งนี้ ! IAM Policy ที่ปลอดภัย

2. อนุญาต AssumeRole

policy ที่อนุญาต AssumeRole ของ IAM User

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

สร้าง IAM group

เราสามารถใส่ IAM Policy ใน IAM User ได้ แต่จะเกิดความผิดพลาดได้ง่ายเพราะจะยากต่อการจัดการดูแลหากเราต้องปรับเปลี่ยนภารตั้งค่าในแต่ละครั้ง ดังนั้นจึงแนะนำให้สร้าง IAM User ใส่ใน IAM group แทน

1. แนบ IAM Policy

แนบMFA + การเปลี่ยนรหัสผ่านและอนุญาต AssumeRoleที่สร้างเมื่อสักครู่นี้

สร้าง IAM User

1. ประเภท Security credentials ของ AWS

กรณีที่ใช้แค่ Cyberduck จะตรวจสอบแค่ Access key - การเข้าถึงด้วย Program เท่านั้นก็ได้

2.เพิ่ม IAM User ใน IAM group

เลือก IAM group ที่สร้างไว้ก่อนหน้านี้

3. ตั้งค่า MFA

หลังจากสร้าง IAM User แล้ว ให้ดูการตั้งค่า MFA ที่บล็อกด้านล่างนี้

การเก็บรักษา Security credentials ของ Access key ID และ Secret access key

ให้จดบันทึก Access key ID และ Secret access key ที่แสดงบนหน้าจอ เพื่อใช้สำหรับการตั้งค่า AWS CLI ในขั้นตอนต่อไป
โปรดตรวจสอบให้แน่ใจว่าทำการดาวน์โหลด csvเตรียมไว้แล้ว

คัดลอก ARN ของ Assigned MFA device เตรียมไว้

เมื่อสร้างเสร็จแล้วค้นหาชื่อและเข้ามาที่ IAM User ของเรา แล้วคัดลอก ARN ของ Assigned MFA device เตรียมไว้ เพราะต้องนำไปใช้ในขั้นตอนของ การตั้งค่าไฟล์ credentials (ตอนคัดลอกให้ระวังในส่วนของ (Virtual) เพราะว่าไม่จำเป็นต้องใส่)

การสร้าง IAM Role

1. Select trusted entity

ดูที่ Trusted entity type แล้วเลือกCustom trust policy
ให้ใส่ AWS account ID ที่เป็น IAM User ที่สร้างมาจาก AssumeRole เดิมในAWS account ID
กรณีที่ IAM User ของ AWS account ที่ระบุนั้นใช้ MFA ก็จะทำให้สามารถได้รับสิทธิ์ของ IAM Role ได้ด้วยการตั้งค่า policy นี้

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AWS account ID>:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

2. แนบ Policy IAM

เพิ่มสิทธิ์การเชื่อมต่อให้กับ S3 ด้วยการอนุญาต policy
ครั้งนี้เราจะเพิ่ม AmazonS3FullAccess ที่ทาง AWS ได้มีการจัดเตรียมไว้ให้สำหรับการอนุญาตในวงกว้าง

คัดลอก ARN ของ IAM Role เตรียมไว้

เมื่อสร้างเสร็จแล้วค้นหาชื่อและเข้ามาที่ IAM User ของเรา แล้วคัดลอก ARN ของ IAM Role เตรียมไว้ เพราะต้องนำไปใช้ในขั้นตอนของ การตั้งค่าไฟล์ credentials

ขั้นตอนฝั่ง Client

ติดตั้ง AWS CLI

ติดตั้ง AWS CLI บน Windows ตามลิงก์บทความด้านล่างนี้

การตั้งค่า credentials ของ AWS CLI

1. การสร้างไฟล์

สร้างไฟล์ตาม Path ต่อไปนี้

C:\Users\<ชื่อ user>\.aws\credentials

2. การตั้งค่าไฟล์ credentials

ตั้งชื่อที่ต้องการในแต่ละชื่อ profile ของ IAM Userและชื่อ profile ของ IAM Roleถ้าไม่มีการยึดติดอะไรเป็นพิเศษ ผมคิดว่าจะจัดการง่ายกว่าถ้าเราใช้ชื่อเดียวกับชื่อ IAM User

เราจะใช้ Access key ID และ Secret access key ที่จดบันทึกไว้ในตอนที่สร้าง IAM User

โปรดตรวจสอบแล้วป้อนข้อมูล ARN ของ Assigned MFA device และ ARN ของ IAM Role ที่ต้องการ switch จาก AWS Management Console
ARN ของ Assigned MFA device มีระบุไว้ในAssigned MFA deviceตรงแท็บSecurity credentialsและให้ระวังในส่วนของ (Virtual) เพราะว่าไม่จำเป็น
และในส่วนของ Region ให้ใช้เป็นap-southeast-1

credentials

[tinnakorn-s3-mfa]
aws_access_key_id = <Access key ID>
aws_secret_access_key = <Secret access key>

[tinnakorn-s3-mfa-role]
region = ap-southeast-1
output = json
mfa_serial = <ARN ของ Assigned MFA device>
role_arn = <ARN ของ IAM Role ที่ต้องการ switch>
source_profile = tinnakorn-s3-mfa

การติดตั้ง Cyberduck

ดาวน์โหลด Cyberduck จากเว็บไซต์ตามลิงก์ด้านล่างนี้และทำการติดตั้ง

การจัดเก็บ profiles สำหรับ AssumeRole

เมื่อเปิดลิงก์นี้ ก็จะแสดงหน้าแบบด้านล่างนี้

สร้างไฟล์ตาม Path ด้านล่างนี้ และบันทึกเนื้อหาที่แสดงตามด้านบนนี้

C:\Program Files\Cyberduck\profiles\S3 (Credentials from AWS Security Token Service).cyberduckprofile

ตรวจสอบการเชื่อมต่อไปยัง S3 ด้วย Cyberduck

ดับเบิ้ลคลิก profile ที่สร้างเมื่อสักครู่นี้

แล้วหน้าการตั้งค่าการเชื่อมต่อจะปรากฏขึ้นมา จากนั้นให้ตั้งค่าตามที่ระบุไว้ด้านล่างนี้ และคลิกปุ่มกากบาทด้านขวาบน

Bookmark จะถูกสร้างขึ้นทุกครั้งที่เปิด profile ขึ้นมา ดังนั้นตรงนี้ให้เราดับเบิ้ลคลิก Bookmark ที่เราตั้งค่าเมื่อสักครู่นี้

เมื่อหน้าจอ MFA Authentication ปรากฏขึ้นมา ให้ป้อน one-time password และคลิก Continue

ถ้าแสดงรายการ S3 Bucket แบบนี้ก็ถือว่าเสร็จแล้ว

สรุป

นี่คือบทสรุปของขั้นตอนการติดตั้งที่จำเป็นในกรณีที่ต้องการเข้าถึง S3 โดยใช้ MFA ด้วย Cyberduck เนื่องจากไม่ค่อยพบขั้นตอนที่รวมเกี่ยวกับการตั้งค่า IAM ดังนั้นผมจึงเขียนบทความนี้ขึ้นมา

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

แปลโดย: POP จากบริษัท Classmethod (Thailand) ครับ !

Link อ้างอิง

ดูรายละเอียดเพิ่มเติมได้ที่นี่ สอบถามเพิ่มเติมเกี่ยวกับ AWS คลิกที่นี่

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.